X121 XReplay

ابزار پخش مجدد کندل‌ها در متاتریدر ۵
TradingView-Style Candle Replay Tool for MetaTrader 5

نسخه: 1.00

توسعه‌دهنده: هادی خزاعی اصل

شرکت: فن آوران ساحر علم

SaherElm IT Center

۱. شرح نیازمندی

۱.۱ مسئله

معامله‌گران برای تمرین و بک‌تست دستی استراتژی‌های خود به ابزاری نیاز دارند که بتواند کندل‌های بازار را از یک نقطه زمانی مشخص پنهان کند و سپس به‌صورت تدریجی (کندل به کندل) آن‌ها را نمایش دهد. این قابلیت در پلتفرم TradingView با نام Bar Replay وجود دارد، اما در MetaTrader 5 به‌صورت پیش‌فرض در دسترس نیست.

۱.۲ نیازمندی‌های عملکردی

#نیازمندیتوضیح
۱پنهان‌سازی کندل‌هاکندل‌های بعد از نقطه cutoff باید از دید کاربر پنهان شوند
۲نمایش تدریجیامکان نمایش کندل‌ها یکی‌یکی با دکمه یا کیبورد
۳پخش خودکارامکان پخش خودکار کندل‌ها با سرعت قابل تنظیم
۴بازنشانیامکان بازگشت به نقطه شروع با یک کلیک
۵تغییر تایم‌فریمحفظ وضعیت Replay هنگام تغییر تایم‌فریم چارت
۶بازیابی خودکاربازیابی خودکار حالت چارت پس از حذف اندیکاتور

۱.۳ محدودیت‌های فنی MQL5

۲. معرفی ابزار

۲.۱ مشخصات کلی

مشخصهمقدار
نامX121 XReplay
نوعاندیکاتور (Indicator)
پلتفرمMetaTrader 5 (MQL5)
نسخه1.00
فایلx-saherelm.x121.x-reply.mq5
مسیر نصبMQL5/Indicators/
وابستگیx-saherelm.common.lib.mq5
توسعه‌دهندههادی خزاعی اصل
شرکتفن آوران ساحر علم (SaherElm IT Center)

۲.۲ روش کار

ابزار از روش DRAW_COLOR_CANDLES با ۵ بافر برای رسم کندل‌ها استفاده می‌کند. کندل‌های واقعی چارت با تغییر استایل چارت (تبدیل رنگ‌ها به CLR_NONE) پنهان می‌شوند و کندل‌های Replay توسط بافرهای اندیکاتور رسم می‌شوند.

۲.۳ بافرها

بافرنوعکاربرد
pBarOpenBufferINDICATOR_DATAقیمت Open
pBarHighBufferINDICATOR_DATAقیمت High
pBarLowBufferINDICATOR_DATAقیمت Low
pBarCloseBufferINDICATOR_DATAقیمت Close
pBarColorBufferINDICATOR_COLOR_INDEXایندکس رنگ کندل

۲.۴ ایندکس‌های رنگ

ایندکسنامکاربرد
0hideColorIDXکندل پنهان (CLR_NONE)
1bullishColorIDXکندل صعودی (clrDodgerBlue)
2bearishColorIDXکندل نزولی (clrDarkOrange)
3neuturalColorIDXکندل خنثی

۲.۵ پارامترهای ورودی

گروهپارامترپیش‌فرضتوضیح
Replay SettingsstartBar20تعداد کندل‌های cutoff
autoPlaySpeed1000سرعت پخش خودکار (ms)
PresentationpanelButtonTextColorclrYellowرنگ متن دکمه‌ها
panelBackgroundColorclrBlackرنگ پس‌زمینه پنل
infoColorclrWhiteرنگ متن اطلاعات
infoPanelBorderColorclrBlackرنگ حاشیه پنل

۲.۶ کنترل‌ها

دکمهمتنعملکردکیبورد
Prev|<یک کندل به عقب← / ↓
Play>شروع پخش خودکارSpace
Pause||توقف پخشSpace
Next>|یک کندل به جلو→ / ↑
ResetRبازنشانی به نقطه شروعR

۳. معماری فنی

۳.۱ ساختار فایل

بخشمحتوا
#region Importsکتابخانه‌های مورد نیاز
#region Definitionsثابت‌ها، ساختار XChartStyle، ایندکس‌های رنگ
#region Inputsپارامترهای ورودی کاربر
#region Buffersتعریف ۵ بافر و پلات
#region Variablesمتغیرهای سراسری
#region Event HandlersOnInit، OnDeinit، OnCalculate، OnTimer، OnChartEvent
#region Custm Functionsتوابع کمکی و اعتبارسنجی
#region Value Calculatorsمحاسبه مقادیر بافرها
#region Chart Styleمدیریت استایل چارت
#region UIپنل کنترل و دکمه‌ها
#region Control Actionsاکشن‌های پخش
#region TimeFrame Changeمدیریت تغییر تایم‌فریم

۳.۲ ساختار XChartStyle

این ساختار ۲۱ فیلد دارد و برای ذخیره و بازیابی کامل حالت چارت استفاده می‌شود:

دستهفیلدها
شناساییchartId, mode
نمایشshowBidLine, showAskLine, showGrid, showVolumes, showTradeLevels, autoScroll, quickNavigation
رنگ‌هاforeGroundColor, backGroundColor, upColor, downColor, bullishColor, bearishColor, gridColor, bidLineColor, askLineColor, lineColor, stopColor, volumesColor

۳.۳ مکانیزم پنهان‌سازی

  1. ReadChartStyle: خواندن حالت فعلی چارت و ذخیره در xReplyChartStyle
  2. SaveChartStyleToFile: ذخیره در فایل باینری با FileWriteStruct
  3. ساخت clearStyle: کپی از حالت اصلی با رنگ‌های CLR_NONE
  4. HideBars: اعمال clearStyle بر چارت → کندل‌های واقعی نامرئی می‌شوند

۳.۴ مکانیزم رسم کندل‌های Replay

  1. OnCalculate: پر کردن بافرهای OHLC از داده‌های واقعی
  2. UpdateVisibleColors: تنظیم رنگ بافر بر اساس وضعیت Replay
  3. کندل‌های قبل از cutoff → رنگ عادی (صعودی/نزولی)
  4. کندل‌های بعد از cutoff → hideColorIDX (پنهان)
  5. کندل‌های قابل نمایش Replay → رنگ عادی (صعودی/نزولی)

۳.۵ مدیریت تغییر تایم‌فریم

هنگام تغییر تایم‌فریم (OnDeinit با REASON_CHARTCHANGE):

  1. محاسبه ایندکس آخرین کندل نمایش داده شده
  2. ذخیره زمان آن کندل در Global Variable
  3. ذخیره وضعیت فعال بودن در Global Variable
  4. ذخیره تعداد کندل‌های قابل نمایش در Global Variable

در تایم‌فریم جدید (OnInit):

  1. بررسی وجود Global Variables
  2. یافتن اولین کندل در تایم‌فریم جدید که شامل زمان ذخیره‌شده است
  3. تنظیم xReplyStartBarIndex بر اساس کندل یافت‌شده
  4. بازیابی تعداد کندل‌های قابل نمایش
  5. حذف Global Variables

۴. فرآیند و مراحل انجام کار

۴.۱ خلاصه مراحل توسعه

مرحلهشرحنتیجه
۱تحلیل نیازمندی و بررسی محدودیت‌های MQL5شناسایی روش پنهان‌سازی
۲طراحی معماری با DRAW_COLOR_CANDLESتعریف ۵ بافر و ۴ رنگ
۳پیاده‌سازی مدیریت Chart Styleساختار XChartStyle با ۲۱ فیلد
۴پیاده‌سازی ذخیره/بازیابی فایل باینریFileWriteStruct / FileReadStruct
۵پیاده‌سازی پنل UI و کنترل‌ها۵ دکمه + برچسب اطلاعات
۶پیاده‌سازی میانبرهای کیبوردArrow Keys + Space + R
۷پیاده‌سازی تایمر و پخش خودکارStartTimer / StopTimer
۸پیاده‌سازی مدیریت تغییر تایم‌فریمGlobal Variables
۹بهینه‌سازی و تست نهایینسخه 1.00

۴.۲ تصمیمات فنی کلیدی

تصمیمدلیل
استفاده از DRAW_COLOR_CANDLESکارآمدترین روش رسم کندل در MQL5 بدون ایجاد اشیاء گرافیکی
پنهان‌سازی با CLR_NONEتنها روش ممکن برای نامرئی کردن کندل‌های واقعی بدون حذف آن‌ها
ذخیره Chart Style در فایل باینریبازیابی خودکار پس از حذف اندیکاتور یا کرش ترمینال
Global Variables برای تایم‌فریمحفظ وضعیت بین OnDeinit و OnInit هنگام تغییر تایم‌فریم
تایمر فقط در حالت Playبهینه‌سازی مصرف CPU در حالت Pause

۴.۳ ساختار کدنویسی

کد بر اساس دستخط کدنویسی شرکت فن آوران ساحر علم نوشته شده است:

۵. راهنمای استفاده

۵.۱ نصب

  1. فایل x-saherelm.x121.x-reply.mq5 را در مسیر MQL5/Indicators/ قرار دهید
  2. در MetaEditor با F7 کامپایل کنید
  3. اندیکاتور را از Navigator روی چارت بکشید
  4. پارامتر startBar را تنظیم کنید (تعداد کندل‌های cutoff)

۵.۲ استفاده

۵.۳ حذف

با حذف اندیکاتور از چارت، حالت چارت به‌طور خودکار بازیابی می‌شود، فایل Chart Style حذف می‌شود و اشیاء UI پاک می‌شوند.

✅ نکته: در صورت کرش ترمینال، فایل Chart Style باقی می‌ماند و در اجرای بعدی به‌جای خواندن از چارت، از فایل خوانده می‌شود. این تضمین می‌کند که حالت چارت همیشه درست بازیابی شود.